/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package models.dao;

import basedatos.DataBaseInstance;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import models.entity.Proveedores;

/**
 *
 * @author cepardov
 */
public class ProveedoresDao {
    protected Connection getConnection() {
        return DataBaseInstance.getInstanceConnection();
    }
    
    public Object [][] getUsuarios(){
        int posid = 0;
        try{
            PreparedStatement pstm = getConnection().prepareStatement("SELECT count(1) as total FROM proveedores");
            try (ResultSet res = pstm.executeQuery()) {
                res.next();
                posid = res.getInt("total");
                res.close();
            }
            this.closeConnection();
            }catch(SQLException se){
                JOptionPane.showMessageDialog(null, se);
        }
        
        Object[][] data = new String[posid][7];
        
        try{
            PreparedStatement pstm = getConnection().prepareStatement("SELECT prov_id,prov_empresa,prov_nombre,prov_apellido,prov_telefono,prov_correo,prov_descripcion FROM proveedores ORDER BY prov_empresa");
            try (ResultSet res = pstm.executeQuery()) {
                int increment = 0;
                while(res.next()){
                    String estProv_id = res.getString("prov_id");
                    String estProv_empresa = res.getString("prov_empresa");
                    String estProv_nombre = res.getString("prov_nombre");
                    String estProv_apellido = res.getString("prov_apellido");
                    String estProv_telefono = res.getString("prov_telefono");
                    String estProv_correo = res.getString("prov_correo");
                    String estProv_descripcion = res.getString("prov_descripcion");
                    data[increment][0] = estProv_id;
                    data[increment][1] = estProv_empresa;
                    data[increment][2] = estProv_nombre;
                    data[increment][3] = estProv_apellido;
                    data[increment][4] = estProv_telefono;
                    data[increment][5] = estProv_correo;
                    data[increment][6] = estProv_descripcion;
                    increment++;
                }
                res.close();
            }
            this.closeConnection();
            }catch(SQLException se){
                JOptionPane.showMessageDialog(null, se);
        }
        return data;
    }
    
    public boolean findById(Proveedores proveedores) {
        PreparedStatement getProveedores;
        ResultSet result = null;
        try {
            getProveedores = getConnection().prepareStatement("SELECT * FROM proveedores WHERE prov_id = ?");
            getProveedores.setString(1, proveedores.getProv_id());
            result = getProveedores.executeQuery();
            
            if (result.next()) {
                proveedores.setProv_id(result.getString("prov_id"));
                proveedores.setProv_empresa(result.getString("prov_empresa"));
                System.out.println("res: "+result.getString("prov_empresa"));
                proveedores.setProv_nombre(result.getString("prov_nombre"));
                proveedores.setProv_apellido(result.getString("prov_apellido"));
                proveedores.setProv_telefono(result.getString("prov_telefono"));
                proveedores.setProv_correo(result.getString("prov_correo"));
                proveedores.setProv_descripcion(result.getString("prov_descripcion"));
                result.close();
            } else {
                return false;
            }
            closeConnection();
            return true;
        } catch (SQLException se) {
            System.err.println("Se ha producido un error de BD.");
            System.err.println(se.getMessage());
            return false;
        }
    }
    
    public boolean save(Proveedores proveedores) {
        PreparedStatement saveProveedores;
        try {
            saveProveedores = getConnection().prepareStatement(
                    "INSERT INTO proveedores (prov_id,prov_empresa,prov_nombre,prov_apellido,prov_telefono,prov_correo,prov_descripcion) "
                    + "VALUES (?, ?, ?, ?, ?, ?, ?)");
            saveProveedores.setString(1, proveedores.getProv_id());
            saveProveedores.setString(2, proveedores.getProv_empresa());
            saveProveedores.setString(3, proveedores.getProv_nombre());
            saveProveedores.setString(4, proveedores.getProv_apellido());
            saveProveedores.setString(5, proveedores.getProv_telefono());
            saveProveedores.setString(6, proveedores.getProv_correo());
            saveProveedores.setString(7, proveedores.getProv_descripcion());
                
            saveProveedores.executeUpdate();

            this.closeConnection();
            return true;
        } catch (SQLException se) {
            int errorcod=se.getErrorCode();
            System.err.println("Debug: ("+errorcod+") Error ejecutando saveProveedores(): "+se.getMessage());
            proveedores.setError(""+errorcod);
            return false;
        }
    }
    
    public boolean update(Proveedores proveedores) {
        PreparedStatement saveProveedores;
        try {
            saveProveedores = getConnection().prepareStatement(
                    "UPDATE proveedores SET prov_id=?,prov_empresa=?,prov_nombre=?,prov_apellido=?,prov_telefono=?,prov_correo=?,prov_descripcion=? where prov_id=?");
            saveProveedores.setString(1, proveedores.getProv_id());
            System.out.println("Debug: getProv_id="+proveedores.getProv_id());
            saveProveedores.setString(2, proveedores.getProv_empresa());
            saveProveedores.setString(3, proveedores.getProv_nombre());
            saveProveedores.setString(4, proveedores.getProv_apellido());
            saveProveedores.setString(5, proveedores.getProv_telefono());
            saveProveedores.setString(6, proveedores.getProv_correo());
            saveProveedores.setString(7, proveedores.getProv_descripcion());
            saveProveedores.setString(8, proveedores.getProv_id_update());
            System.out.println("Debug: getProv_id_update="+proveedores.getProv_id_update());
            
            saveProveedores.executeUpdate();
            
            this.closeConnection();
            return true;
        } catch (SQLException se) {
            int errorcod=se.getErrorCode();
            System.err.println("Debug: ("+errorcod+") Error ejecutando updateProveedores(): "+se.getMessage());
            proveedores.setError(""+errorcod);
            return false;
        }
    }

    public boolean delete(Proveedores proveedores) {
        PreparedStatement delProveedores;
        try {

            if (proveedores.getProv_id() != null) {
                delProveedores = getConnection().prepareStatement(
                        "DELETE FROM proveedores WHERE prov_id = ?");
                delProveedores.setString(1, proveedores.getProv_id());
                delProveedores.executeUpdate();
            }
            closeConnection();
            return true;
        } catch (SQLException se) {
            int errorcod=se.getErrorCode();
            System.err.println("Debug: ("+errorcod+") Error ejecutando deleteProveedores(): "+se.getMessage());
            proveedores.setError(""+errorcod);
            return false;
        }
    }

    public void closeConnection() {
        DataBaseInstance.closeConnection();
    }
    
    private void errorMsj(String msj){
        JOptionPane.showMessageDialog(null, msj, "Adm. de Base de Datos", JOptionPane.ERROR_MESSAGE);
    }
    
}
